package com.hjj.concurrence.volatileTest;

/**
 *
 * 依据 happens-before 原则
 * 程序顺序原则：操作 1 happens-before 操作 2 ，操作 3 happens-before 操作 4 。
 * volatile 原则：操作 2 happens-before 操作 3 。
 * 传递性原则：操作 1 happens-before 操作 4 。
 * @author hjj
 * @create 2019-12-16 10:50
 */
public class VolatileTest {
    int i = 0;
    volatile boolean flag = false;
    // Thread A
    public void write() {
        i = 2; // 1
        flag = true; // 2
    }
    // Thread B
    public void read() {
        if (flag) { // 3
            System.out.println("---> i=" + i); // 4
        }
    }
}
